package com.deyu.util;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.deyu.domain.Activity;
import com.deyu.domain.ActivityType;
import com.deyu.domain.Clasz;
import com.deyu.domain.Department;
import com.deyu.domain.Score;
import com.deyu.domain.Student;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class StrUtil {
	
	/**
	 * @param targetClass     目标class
	 * @param fields	               需要转成json的 属性
	 * @param clazz	                         特殊的对象属性
	 * @param clazzFields     特殊的对象属性 需要转成json的属性
	 * @param object		     要转的内容
	 */
	public static void sendJson(Class targetClass,String[] fields,Class clazz,String[]  clazzFields,Object object) {
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter print=null;
		try {
			print=response.getWriter();
			NormalStrategy ts = new NormalStrategy(targetClass);
			ts.setClazz(clazz);
			ts.setClazzFields(clazzFields);
			ts.setFields(fields);
			ts.setReverse(true);
			Gson gson = new GsonBuilder()
			.setDateFormat("yyyy-MM-dd HH:mm:ss") 
			.setExclusionStrategies(ts)
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.create();
			String jsonString  = gson.toJson(object);
			print.print(jsonString);
			System.out.println(jsonString);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if (response!=null) {
			    print.flush();
				print.close();
			}
		}
	}
	/**
	 * @param targetClass     目标class
	 * @param fields	               需要转成json的 属性
	 * @param clazz	                         特殊的对象属性
	 * @param clazzFields     特殊的对象属性 需要转成json的属性
	 * @param object		     要转的内容
	 */
	public static String paseJson(Class targetClass,String[] fields,Class clazz,String[]  clazzFields,Object object) {
		String jsonString = null;
		try {
			
			NormalStrategy ts = new NormalStrategy(targetClass);
			ts.setClazz(clazz);
			ts.setClazzFields(clazzFields);
			ts.setFields(fields);
			ts.setReverse(true);
			Gson gson = new GsonBuilder()
			.setDateFormat("yyyy-MM-dd HH:mm:ss") 
			.setExclusionStrategies(ts)
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.create();
			jsonString  = gson.toJson(object);
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return jsonString;
	}
	/**
	 * @param targetClass     目标class
	 * @param fields	               需要转成json的 属性
	 * @param object		     要转的内容
	 */
    public static void sendJson(Class targetClass,String[] fields,Object object){
    	HttpServletResponse response = ServletActionContext.getResponse();
    	response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter print = null;
		try {
			print=response.getWriter();
			NormalStrategy ts = new NormalStrategy(targetClass);
			ts.setFields(fields);
			ts.setReverse(true);
			Gson gson = new GsonBuilder()
			.setDateFormat("yyyy-MM-dd HH:mm:ss") 
			.setExclusionStrategies(ts)
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.create();
			String jsonString  = gson.toJson(object);
			print.print(jsonString);
		} catch (IOException e) {
			e.printStackTrace();		
		}finally{
			print.close();
		}
		
    }
    /**
     * 
     * @param object 
     */
    public static  void sendJson(Object object) {

		HttpServletResponse response = ServletActionContext.getResponse();  
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter print = null;
		try {
			print = response.getWriter();
			Gson gson = new GsonBuilder() 
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.setDateFormat("yyyy-MM-dd HH:mm:ss")  
			.create();
			String jsonString  = gson.toJson(object); 
			print.print(jsonString);
			System.out.println(jsonString);
		} catch (IOException e) {
			e.printStackTrace();
		}	   		
	}
    /**
	 * @param targetClass     目标class
	 * @param fields	               需要转成json的 属性
	 * @param clazz	                         特殊的对象属性
	 * @param clazzFields     特殊的对象属性 需要转成json的属性
	 * @Class clazz2    特殊的对象属性
	 * @String[] clazzFields2  特殊的对象属性 需要转成json的属性
	 * @param object		     要转的内容
	 */
	public static void sendJson(Class targetClass,String[] fields,Class clazz,String[]  clazzFields,
			Class clazz2, String[] clazzFields2, Object object) {
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter print=null;
		try {
			print=response.getWriter();
			NormalStrategy ts = new NormalStrategy(targetClass);
			ts.setClazz(clazz);			
			ts.setClazzFields(clazzFields);
			ts.setClazz2(clazz2);
			ts.setClazzFields2(clazzFields2);
			ts.setFields(fields);
			ts.setReverse(true);
			Gson gson = new GsonBuilder()
			.setDateFormat("yyyy-MM-dd HH:mm:ss") 
			.setExclusionStrategies(ts)
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.create();
			String jsonString  = gson.toJson(object);
			print.print(jsonString);
			System.out.println(jsonString);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if (response!=null) {
			    print.flush();
				print.close();
			}
		}
		
	}
	/**
	 * @param targetClass     目标class
	 * @param fields	               需要转成json的 属性
	 * @param clazz	                         特殊的对象属性
	 * @param clazzFields     特殊的对象属性 需要转成json的属性
	 * @Class clazz2    特殊的对象属性
	 * @@String[] clazzFields2   特殊的对象属性 需要转成json的属性
	 * @Class clazz3  特殊的对象属性
	 * @String[] clazzFields3  特殊的对象属性 需要转成json的属性
	 * @param object		     要转的内容
	 */
	public static void sendJson(Class targetClass,String[] fields,Class clazz,String[]  clazzFields,
			Class clazz2, String[] clazzFields2,Class clazz3, String[] clazzFields3, Object object) {
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter print=null;
		try {
			print=response.getWriter();
			NormalStrategy ts = new NormalStrategy(targetClass);
			ts.setClazz(clazz);	
			ts.setFields(fields);
			ts.setClazzFields(clazzFields);
			ts.setClazz2(clazz2);
			ts.setClazzFields2(clazzFields2);
			ts.setClazz3(clazz3);
			ts.setClazzFields3(clazzFields3);
			ts.setReverse(true);
			Gson gson = new GsonBuilder()
			.setDateFormat("yyyy-MM-dd HH:mm:ss") 
			.setExclusionStrategies(ts)
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.create();
			String jsonString  = gson.toJson(object);
			print.print(jsonString);
			System.out.println(jsonString);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if (response!=null) {
			    print.flush();
				print.close();
			}
		}
		
	}
	/**
	 * @param targetClass     目标class
	 * @param fields	               需要转成json的 属性
	 * @param clazz	                         特殊的对象属性
	 * @param clazzFields     特殊的对象属性 需要转成json的属性
	 * @Class clazz2    特殊的对象属性
	 * @String[] clazzFields2   特殊的对象属性 需要转成json的属性
	 * @Class clazz3  特殊的对象属性
	 * @String[] clazzFields3  特殊的对象属性 需要转成json的属性
	 * @Class clazz4 特殊的对象属性
	 * @String[] clazzFields4  特殊的对象属性 需要转成json的属性
	 * @param object		     要转的内容
	 * 
	 * 
	 */
	public static void sendJson(Class targetClass,String[] fields,Class clazz,String[]  clazzFields,
			Class clazz2, String[] clazzFields2,Class clazz3, String[] clazzFields3,Class clazz4, 
			String[] clazzFields4, Object object) {
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter print=null;
		try {
			print=response.getWriter();
			NormalStrategy ts = new NormalStrategy(targetClass);
			ts.setClazz(clazz);	
			ts.setFields(fields);
			ts.setClazzFields(clazzFields);
			ts.setClazz2(clazz2);
			ts.setClazzFields2(clazzFields2);
			ts.setClazz3(clazz3);
			ts.setClazzFields3(clazzFields3);
			ts.setClazz4(clazz4);
			ts.setClazzFields4(clazzFields4);
			ts.setReverse(true);
			Gson gson = new GsonBuilder()
			.setDateFormat("yyyy-MM-dd HH:mm:ss") 
			.setExclusionStrategies(ts)
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.create();
			String jsonString  = gson.toJson(object);
			print.print(jsonString);
			System.out.println(jsonString);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if (response!=null) {
			    print.flush();
				print.close();
			}
		}
		
	}
	/**
	 * @param targetClass     目标class
	 * @param fields	               需要转成json的 属性
	 * @param clazz	                         特殊的对象属性
	 * @param clazzFields     特殊的对象属性 需要转成json的属性
	 * @Class clazz2    特殊的对象属性
	 * @String[] clazzFields2   特殊的对象属性 需要转成json的属性
	 * @Class clazz3  特殊的对象属性
	 * @String[] clazzFields3  特殊的对象属性 需要转成json的属性
	 * @Class clazz4 特殊的对象属性
	 * @String[] clazzFields4  特殊的对象属性 需要转成json的属性
	 * * @Class clazz5 特殊的对象属性
	 * @String[] clazzFields5  特殊的对象属性 需要转成json的属性
	 * @param object		     要转的内容
	 * 
	 * 
	 */
	public static void sendJson(Class targetClass,String[] fields,Class clazz,String[]  clazzFields,
			Class clazz2, String[] clazzFields2,Class clazz3, String[] clazzFields3,Class clazz4, 
			String[] clazzFields4, Class clazz5, 
			String[] clazzFields5,Object object) {
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setContentType("text/html;charset=utf-8");
		response.setCharacterEncoding("UTF-8");
		PrintWriter print=null;
		try {
			print=response.getWriter();
			NormalStrategy ts = new NormalStrategy(targetClass);
			ts.setClazz(clazz);	
			ts.setFields(fields);
			ts.setClazzFields(clazzFields);
			ts.setClazz2(clazz2);
			ts.setClazzFields2(clazzFields2);
			ts.setClazz3(clazz3);
			ts.setClazzFields3(clazzFields3);
			ts.setClazz4(clazz4);
			ts.setClazzFields4(clazzFields4);
			ts.setClazz5(clazz5);
			ts.setClazzFields5(clazzFields5);
			ts.setReverse(true);
			Gson gson = new GsonBuilder()
			.setDateFormat("yyyy-MM-dd HH:mm:ss") 
			.setExclusionStrategies(ts)
			.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
			.create();
			String jsonString  = gson.toJson(object);
			print.print(jsonString);
			System.out.println(jsonString);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			if (response!=null) {
			    print.flush();
				print.close();
			}
		}
		
	}
    
}
